package com.es.designmode.command;

/**
 * 命令模式
 * 将一个请求封装为一个对象，从而使你可用不同的请求对客户进行参数化
 * 对请求排队或者记录请求日志，以及支持可撤销的操作
 * <p>
 * 较容易的设计命令队列
 * 在需要的情况下，更容易的将命令记入日志
 * 允许接收请求的一方决定是否要否决请求
 * 容易实现对请求的撤销和重做
 * 加进新的具体命令类不影响其他的类，增加新的具体命令类很容易
 * <p>
 * 命令模式把请求一个操作的对象与知道怎么执行一个操作的对象分割开
 *
 * @author Will
 */
public class ClientSide {

    public static void main(String[] args) {

        Receiver r = new Receiver();        // 接收
        Command c = new ConcreteCommand(r); // 实现命令，装载接收对象

        Invoker i = new Invoker();          // 要求执行

        // 重点在这里，可以装载不同的命令，并记录
        i.setCommand(c);                    // 装载命令
        i.executeCommand();                 // 执行命令

        // 执行过程：invoker =》 command =》 receiver
    }
}
